Applications are becoming increasingly complex and are often distributed across multiple instances. To further exacerbate the already challenging task of building a distributed system, applications are increasingly being deployed across multiple datacenters. As processing requirements increase and as processing capabilities become available in different datacenters in a hybrid cloud, scaling the distributed applications with cross-datacenter deployment capabilities becomes increasingly difficult.
Some existing solutions to inter-datacenter networking hide the separation between datacenters, making it difficult to efficiently process data with respect to the different datacenters. Traffic between datacenters has higher latency and is more likely to suffer from packet loss than when confined to a single network, so it is desirable to route and/or batch communications to minimize traffic between datacenters. However, by hiding the separation between datacenters (i.e., treating each application instance as though it were operating in a single datacenter), communication between the application instances of a distributed application becomes increasingly inefficient as the application grows.
Alternatively, some distributed applications require that datacenter-aware processing be built into the distributed application, requiring significant development resources as each application must track the locations of the various application instances and route the data between the various application instances. Complicated routes must be managed and tracked between each pair of individual application instances in a cluster. In order to maintain connectivity, the cluster topology must be continuously monitored in order to update the routes and compensate for partitions, failures and additions.
Some existing solutions provide a more generalized solution, but still require significant management resources as the locations and connections between the various instances must be managed as instances are added and removed. For example, in some cases, the distributed application requires an admin to create and maintain a VPN across a variety of public cloud infrastructures, leading to significant usability issues. Other alternatives involve treating each datacenter as a mostly-independent application with some special case logic for routing and/or batching communication between datacenters. However, such solutions require significant engineering effort when adding new features.
Some alternatives provide federated management of the various application instances, with centralized control and management for the application instances at the different datacenters, but such solutions often require significant management resources (e.g., for setup, configuration, and maintenance), or have strict requirements for interconnectivity of the various application instances. For example, some solutions simplify the problem by requiring that all application instances across all datacenters form a fully connected graph. This removes the need for complicated routing logic, but also prevents deployment in certain circumstances due to policy or security concerns. As such, a generalized, datacenter-aware, and simplified solution for the deployment of distributed applications across multiple datacenters is needed.